package consumidor;


public class Buffer {

    private int tamMax,  cantElementos,  iEntrada,  iSalida;
    private Elemento elementos[];

    public Buffer(int tam) {
        elementos = new Elemento[tam];
        iEntrada = iSalida = 0;
        tamMax = tam;
        cantElementos = 0;
    }

    public synchronized void poner(Elemento elem) {
        while (estaLleno()) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        notifyAll();
        elementos[iEntrada] = elem;
        iEntrada = (iEntrada + 1) % tamMax;
        cantElementos++;
        System.out.println("cantidad de elementos en la cola: "+cantElementos);
    }

    public synchronized Elemento sacar() {
        while (estaVacio()) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        notifyAll();
        Elemento elem = elementos[iSalida];
        iSalida = (iSalida + 1) % tamMax;
        cantElementos--;
        System.out.println("Sacado elemento, quedan "+cantElementos);
        return elem;
    }

    public boolean estaVacio() {
        return (cantElementos == 0);
    }

    public boolean estaLleno() {
        return (cantElementos == tamMax);
    }

    public int getCantElementos() {
        return cantElementos;
    }
}
